/*
 * ASerialResponse.h
 *
 * @author Bematech S.A.
 */

#ifndef __BILBAO_PROTOCOL_SERIAL_SERIAL_RESPONSE_ABSTRACT_CLASS_H__
#define __BILBAO_PROTOCOL_SERIAL_SERIAL_RESPONSE_ABSTRACT_CLASS_H__

#include "bilbao/types.h"
#include "bilbao/protocol/sefaz/ASefazResponse.h"

using bilbao::protocol::sefaz::ASefazResponse;

namespace bilbao
{
	namespace protocol
	{
		namespace serial
		{
			class ASerialResponse
			{
			public:
				enum E_SERIAL_RESPONSE_ID
				{
					//AtivarSAT
					ATIVAR_SAT_ATIVADO_CORRETAMENTE = 4000, // 04000
					ATIVAR_SAT_ERRO_CRIACAO_CERTIFICADO = 4001,// 04001
					ATIVAR_SAT_CNPJ_INVALIDO = 4002,// 04002
					ATIVAR_SAT_SAT_JA_ATIVADO = 4003,// 04003
					ATIVAR_SAT_POSSE_CESSADA = 4004,// 04004
					ATIVAR_SAT_ERRO_COM_SEFAZ = 4005,// 04005
					ATIVAR_SAT_SAT_EM_PROCESSAMENTO = 4098,// 04098
					ATIVAR_SAT_ERRO_DESCONHECIDO = 4099,// 04099
					//ComunicarCertificadoICPBRASIL
					CERT_ICP_BRASIL_SUCESSO = 5001,// 05001
					CERT_ICP_BRASIL_ERRO_COM_SEFAZ = 5002,// 05002
					CERT_ICP_BRASIL_SAT_EM_PROCESSAMENTO = 5098,// 05098
					CERT_ICP_BRASIL_ERRO_DESCONHECIDO = 5099,// 05099
					//EnviarDadosVenda
					ENVIAR_D_VENDA_SUCESSO = 6000,// 06000
					ENVIAR_D_VENDA_COD_ATIV_INVALIDO = 6001,// 06001
					ENVIAR_D_VENDA_SAT_NAO_ATIVADO = 6002,// 06002
					ENVIAR_D_VENDA_SAT_NAO_VINCULADO = 6003,// 06003
					ENVIAR_D_VENDA_VINC_NAO_CONFERE = 6004,// 06004
					ENVIAR_D_VENDA_CFE_MAIOR = 6005,// 06005
					ENVIAR_D_VENDA_SAT_BLOQ_CON = 6006,// 06006
					ENVIAR_D_VENDA_SAT_BLOQ_SEFAZ = 6007,// 06007
					ENVIAR_D_VENDA_SAT_BLOQ_FALTA_COM = 6008,// 06008
					ENVIAR_D_VENDA_SAT_BLOQ_COD_INCORRETO = 6009,// 06009
					ENVIAR_D_VENDA_ERRO_VALIDACAO = 6010,// 06010
					ENVIAR_D_VENDA_SAT_EM_PROCESSAMENTO = 6098,// 06098
					ENVIAR_D_VENDA_ERRO_DESCONHECIDO = 6099,// 06099
					//CancelarUltimaVenda
					CANC_ULT_VENDA_SUCESSO = 7000,// 07000
					CANC_ULT_VENDA_COD_INVALID = 7001,// 0001
					CANC_ULT_VENDA_CUP_INVALID = 7002, // 07002
					CANC_ULT_VENDA_BLOQ_CON = 7003, // 07003
					CANC_ULT_VENDA_BLOQ_SEFAZ = 7004, // 07004
					CANC_ULT_VENDA_BLOQ_FALTA_COM = 7005, // 07005
					CANC_ULT_VENDA_BLOQ_COD_INCORRETO = 7006, // 07006
					CANC_ULT_VENDA_ERRO_VALIDACAO = 7007, // 07007
					CANC_ULT_VENDA_SAT_EM_PROCESSAMENTO = 7098, // 07098
					CANC_ULT_VENDA_ERRO_DESCONHECIDO = 7099, // 07099
					//ConsultarSAT
					CONSUL_SAT_SAT_EM_OPERACAO = 8000, // 08000
					CONSUL_SAT_SAT_EM_PROCESSAMENTO = 8098, // 08098
					COSUL_SAT_ERRO_DESCONHECIDO = 8099, // 08099
					//TesteFimAFim
					TESTE_FIM_FIM_SUCESSO = 9000, // 09000
					TESTE_FIM_FIM_COD_INVALID = 9001, // 09001
					TESTE_FIM_FIM_SAT_NAO_ATIVADO = 9002, // 09002
					TESTE_FIM_FIM_SAT_EM_PROCESSAMENTO = 9098, // 09098
					TESTE_FIM_FIM_ERRO_DESCONHECIDO = 9099, // 09099
					//ConsultarStatusOperacional
					CONS_STA_OPER_SUCESSO = 10000, // 10000
					CONS_STA_OPER_SAT_EM_PROCESSAMENTO = 10098, // 10098
					CONS_STA_OPER_ERRO_DESCONHECIDO = 10099, // 10099
					//ConsultarNumeroSessao
					CONS_NUM_SESSAO_SUCESSO = 11000, // 11000
					CONS_NUM_COD_INVALIDO = 11001, // 11001
					CONS_NUM_SESSAO_SAT_NAO_ATIVADO = 11002, // 11002
					CONS_NUM_SESSAO_DOC_NAO_EXISTE = 11003, // 11003
					CONS_NUM_SESSAO_SAT_EM_PROCESSAMENTO = 11098, // 11098
					CONS_NUM_SESSAO_ERRO_DESCONHECIDO = 11099, // 11099
					//ConfiguracaoDeRede
					CONFIG_REDE_SUCESSO = 12000, // 12000
					CONFIG_REDE_DADOS_FORA_PADRAO = 12001, // 12001
					CONFIG_REDE_SAT_EM_PROCESSAMENTO = 12098, // 12098
					CONFIG_REDE_ERRO_DESCONHECIDO = 12099, // 12099
					//AssociarAssinatura
					ASSO_ASSINATURA_SUCESSO = 13000, // 13000
					ASSO_ASSINATURA_ERRO_COM_SEFAZ = 13001, // 13001
					ASSO_ASSINATURA_FORA_PADRAO = 13002, // 13002
					ASSO_ASSINATURA_SAT_EM_PROCESSAMENTO = 13098, // 13098
					ASSO_ASSINATURA_ERRO_DESCONHECIDO = 13099, // 13099
					//AtualizarSAT
					ATUAL_SAT_SUCESSO = 14000, // 14000
					ATUAL_SAT_EM_ANDAMENTO = 14001, // 14001
					ATUAL_SAT_ERRO_ATUALIZACAO = 14002, // 14002
					ATUAL_SAT_SAT_EM_PROCESSAMENTO = 14098, // 14098
					ATUAL_SAT_ERRO_DESCONHECIDO = 14099, // 14099
					//ExtrairLog
					EXTRAIR_LOG_COMPLETA = 15000, // 15000
					EXTRAIR_LOG_EM_ANDAMENTO = 15001, // 15001
					EXTRAIR_LOG_SAT_EM_PROCESSAMENTO = 15098, // 15098
					EXTRAIR_LOG_ERRO_DESCONHECIDO = 15099, // 15099
					//BloquearSAT
					BLOQ_SAT_SUCESSO = 16000, // 16000
					BLOQ_SAT_EQUI_JA_BLOQUEADO = 16001, // 16001
					BLOQ_SAT_ERRO_COM_SEFAZ = 16002, // 16002
					BLOQ_SAT_SAT_EM_PROCESSAMENTO = 16098, // 16098
					BLOQ_SAT_ERRO_DESCONHECIDO = 16099, // 16099
					//DesbloquearSAT
					DESBLOQ_SAT_SUCESSO = 17000, // 17000
					DESBLOQ_SAT_BLOQ_P_CONT = 17001, // 17001
					DESBLOQ_SAT_BLOQ_P_SEFAZ = 17002, // 17002
					DESBLOQ_SAT_ERRO_COM_SEFAZ = 17003, // 17003
					DESBLOQ_SAT_SAT_EM_PROCESSAMENTO = 17098, // 17098
					DESBLOQ_SAT_ERRO_DESCONHECIDO = 17099, // 17099
					//TrocarCodigoAtivacao
					TROC_COD_ATIV_SUCESSO = 18000, // 18000
					TROC_COD_ATIV_COD_INCORRETO = 18001, // 18001
					TROC_COD_ATIV_COD_EMER_INCOR = 18002, // 18002
					TROC_COD_ATIV_SAT_EM_PROCESSAMENTO = 18098, // 18098
					TROC_COD_ATIV_ERRO_DESCONHECIDO = 18099	// 18099
				};

				/*
				 * Destrutor
				 */
				virtual ~ASerialResponse( void );

				/*
				 * Retorna a mensagem formatada
				 */
				virtual void getMessageFormatted( String& );

				/**
				 *
				 */
				static String getMessageSerialResponse( E_SERIAL_RESPONSE_ID id );

				/*
				 *
				 */
				static String EEEEtoString( E_SERIAL_RESPONSE_ID eeee );

			protected:
				/*
				 * Construtor
				 */
				ASerialResponse( E_SERIAL_RESPONSE_ID id, ASefazResponse::E_SEFAZ_RESPONSE_ID code );

				/*
				 * Altera um parâmetro de uma posição específica
				 */
				void setParameter( size_t n, const String& str );

				/*
				 * Parâmetros da resposta
				 */
				Vector<String> _parameters;

				/*
				 * EEEE
				 */
				E_SERIAL_RESPONSE_ID _id;

				/*
				 *
				 */
				ASefazResponse::E_SEFAZ_RESPONSE_ID _code;

			}; // class ASerialResponse
		} // namespace serial
	} // namespace protocol
} // namespace bilbao


#endif // __BILBAO_PROTOCOL_SERIAL_SERIAL_RESPONSE_ABSTRACT_CLASS_H__
